#!/bin/sh
#
# $OpenBSD: check-distfiles,v 1.5 2013/09/15 09:20:04 rpe Exp $
#
# Copyright (c) 1999 Marc Espie.
# 
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
# 
# THIS SOFTWARE IS PROVIDED BY THE OPENBSD PROJECT AND CONTRIBUTORS
# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OPENBSD
# PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

PATH=/bin:/usr/bin
export PATH

# This script does a full-scale check of everything that lives under
# /usr/ports/distfiles
PORTS=/usr/ports
ALLSUMS=`mktemp /tmp/checksums.XXXXXXXXXX` || exit 1
GREP_RESULT=`mktemp /tmp/grep.XXXXXXXXXX` || exit 1
# assume that INDEX is up-to-date
touch $ALLSUMS
cut -d\| -f2 <$PORTS/INDEX|while read i
do
	if [ -f $i/distinfo ] 
	then
		cat $i/distinfo >>$ALLSUMS
	else
		echo "Port $i does not seem to have a checksum file"
	fi
done

cd $PORTS/distfiles 
find . -type f|sed -e 's|^\./||'|while read name
do
	if grep "^SHA1 ($name) = " $ALLSUMS >$GREP_RESULT
	then
		sha1 $name >>$GREP_RESULT
		uniq -u <$GREP_RESULT
	else
		echo "no checksum recorded for $name"
	fi
done

rm $ALLSUMS $GREP_RESULT
